package com.ddpt.permission.dubbo;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lh.center.common.base.BizEntity;
import com.lh.center.common.dto.IdDto;
import com.lh.center.common.dto.IdExtDto;
import com.lh.center.permission.api.dubbo.DubboStoreUserService;
import com.lh.center.permission.api.entity.StoreAdminUser;
import com.lh.center.permission.api.request.PageStoreUserReq;
import com.lh.center.permission.api.request.StoreListRequest;
import com.lh.center.permission.api.request.UpdateStoreUserPasswordReq;
import com.lh.center.permission.api.response.PageStoreUserRes;
import com.lh.center.permission.service.StoreAdminUserService;
import org.apache.dubbo.config.annotation.DubboService;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

/**
 * @author QSW
 * @data 2022/4/24 17:43
 **/
@DubboService
public class DubboStoreUserServiceImpl implements DubboStoreUserService {
    @Resource
    private StoreAdminUserService storeAdminUserService;

    @Override
    public List<StoreAdminUser> getByMerchant(Long merchantId) {
        return storeAdminUserService.list(Wrappers.lambdaQuery(StoreAdminUser.class)
                .eq(BizEntity::getMerchantId, merchantId));
    }

    @Override
    public StoreAdminUser saveStore(StoreAdminUser storeAdminUser) {
        return storeAdminUserService.createStoreUser(storeAdminUser);
    }

    @Override
    public void updateStore(StoreAdminUser storeAdminUser) {
        storeAdminUserService.updateStoreUser(storeAdminUser);
    }

    @Override
    public void deleteStore(IdDto idDto) {
        storeAdminUserService.deleteStoreUser(idDto);
    }

    @Override
    public StoreAdminUser getByStoreId(IdDto idDto) {
        return storeAdminUserService.getStoreById(idDto);
    }

    @Override
    public List<StoreAdminUser> getByStoreIds(Collection<Long> storeIds) {
        return storeAdminUserService.listByIds(storeIds);
    }

    @Override
    public Integer updateStatus(IdExtDto idDto) {
        return storeAdminUserService.updateStatus(idDto);
    }

    @Override
    public Page<PageStoreUserRes> getPageUser(PageStoreUserReq pageStoreUserReq) {
        return storeAdminUserService.getPageUser(pageStoreUserReq);
    }

    @Override
    public Page<PageStoreUserRes> getStorePage(PageStoreUserReq pageStoreUserReq) {
        return storeAdminUserService.getStorePage(pageStoreUserReq);
    }

    @Override
    public void updatePassword(UpdateStoreUserPasswordReq updateStoreUserPasswordReq) {
        storeAdminUserService.updatePassword(updateStoreUserPasswordReq);
    }

    @Override
    public List<StoreAdminUser> getStoreList(StoreListRequest storeListDto) {

        List<StoreAdminUser> storeUsers = new ArrayList<>();
        Integer defaultStore = storeListDto.getDefaultStore();
        if (null == defaultStore || 0 == defaultStore || -1 == defaultStore) {
            storeUsers.addAll(storeAdminUserService.list(Wrappers.lambdaQuery(StoreAdminUser.class)
                    .eq(BizEntity::getMerchantId, storeListDto.getMerchantId())
                    .eq(Objects.nonNull(storeListDto.getStatus()), StoreAdminUser::getStatus, storeListDto.getStatus())
            ));
        }
        if (null != defaultStore && (1 == defaultStore || -1 == defaultStore)) {
            storeUsers.addAll(storeAdminUserService.getDefaultStores(storeListDto));
        }

        return storeUsers;


    }

}
